var createError = require("http-errors");
var express = require("express");
var path = require("path");
var cookieParser = require("cookie-parser");
var logger = require("morgan");
let expressJWT = require("express-jwt");

var indexRouter = require("./routes/index");
var usersRouter = require("./routes/users");
let goodsRouter = require("./routes/goods");

var app = express();

// view engine setup
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "jade");

app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, "public")));
const secretKey = "WQU13289SFS";
app.use(
	expressJWT({
		secret: secretKey,
		algorithms: ["HS256"],
	}).unless({
		// expressJWT().unless() 用于放行 中间件
		// 需要放行的目录 写在path 的数组中
		// 如果需要放行目录 写正则表达式
		path: ["/users/login", "users/reg", /^\/goods\/.*/],
	})
);
app.use("/", indexRouter);
app.use("/users", usersRouter);
app.use("/goods", goodsRouter);

// catch 404 and forward to error handler
app.use(function (req, res, next) {
	next(createError(404));
});

// error handler
app.use(function (err, req, res, next) {
	// set locals, only providing error in development
	res.locals.message = err.message;
	res.locals.error = req.app.get("env") === "development" ? err : {};

	// render the error page
	res.status(err.status || 500);
	res.render("error");
});

module.exports = app;
